#include <bits/stdc++.h>
#define int long long
using namespace std;

// 整体就像是一个横着放的哈希表, 数组存放的是一个链表, 表示与该节点相邻的所有的边
const int maxn = 1e5+5;
int cnt; // 记录边的数目
int head[maxn]; // 数组, 记录第一个相邻的边, 然后根据这个边往下就可以找到所有相邻的边

struct Edge{
	int next, to; // next 表示下一个边的编号, to 表示这个边指向的节点的值
}edge[maxn<<1]; 


void add(int from, int to) {
	edge[++cnt].next = head[from]; // 头插法, 将这条边插进去
	edge[cnt].to = to;
	head[from] = cnt;
}

signed main(){
	int q;
	cin >> q;
	for (int i=1;i<=q;i++) {
		int a, b;
		cin >> a >> b;
		add(a, b);
	}
	
	for (int i=1;i<=q;i++) {
		cout << i << ":" ;
		int s = head[i];
		while (s != 0) {
			cout << edge[s].to << " ";
			s = edge[s].next;
		}
		cout << '\n';
	}
}

